package com.zyq.plus;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.fill.Column;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class GenerateMain {
    public static void main(String[] args) {

        FastAutoGenerator.create("jdbc:mysql://localhost:3306/test?&useSSL=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai","root","root")
                // 全局配置
                .globalConfig((scanner, builder) -> builder.author(scanner.apply("请输入作者名称？"))
                        /*.fileOverride()*///fileOverride表示覆盖已生成文件，已经被新版的mybatisplus弃用了
                        //.outputDir("D:\\idea-workspace\\_09_mybatisplus_generate_new\\src\\main\\java"))
                        .outputDir(System.getProperty("user.dir")+"\\src\\main\\java"))
                        //System.getProperty("user.dir")用于获取项目路径: D:\idea-workspace\_09_mybatisplus_generate_new
                // 包配置
                .packageConfig((scanner, builder) -> builder.parent(scanner.apply("请输入包名？")).pathInfo(Collections.singletonMap(OutputFile.xml,System.getProperty("user.dir")+"/src/main/resources/mapper")))
                // 策略配置
                .strategyConfig((scanner, builder) -> builder.addInclude(getTables(scanner.apply("请输入表名，多个英文逗号分隔？所有输入 all")))
                        .controllerBuilder()
                        .enableRestStyle()
                        .enableHyphenStyle()
                        .entityBuilder()
                        .enableLombok()
                        .addTableFills(
                                new Column("create_time", FieldFill.INSERT)
                        )
                        .enableChainModel()
                        .naming(NamingStrategy.underline_to_camel)//数据表映射实体命名策略：默认下划线转驼峰underline_to_camel
                        .columnNaming(NamingStrategy.underline_to_camel)//表字段映射实体属性命名规则：默认null，不指定按照naming执行
                        .idType(IdType.AUTO)//添加全局主键类型
                        .formatFileName("%s")//格式化实体名称，%s取消首字母I,
                        .mapperBuilder()
                        .enableMapperAnnotation()//开启mapper注解
                        .enableBaseResultMap()//启用xml文件中的BaseResultMap 生成
                        .enableBaseColumnList()//启用xml文件中的BaseColumnList
                        .formatMapperFileName("%sMapper")//格式化Dao类名称
                        .formatXmlFileName("%sMapper")//格式化xml文件名称
                        .serviceBuilder()
                        .formatServiceFileName("%sService")//格式化 service 接口文件名称
                        .formatServiceImplFileName("%sServiceImpl")//格式化 service 接口文件名称
                        .build())
                /*
                    模板引擎配置，默认 Velocity 可选模板引擎 Beetl 或 Freemarker
                   .templateEngine(new BeetlTemplateEngine())
                   .templateEngine(new FreemarkerTemplateEngine())
                 */
                .execute();
    }

    // 处理 all 情况
    protected static List<String> getTables(String tables) {
        return "all".equals(tables) ? Collections.emptyList() : Arrays.asList(tables.split(","));
    }
}
